const createId = require('../utils/createId')
// const fs = require('fs')
// const path = require('path')
// // 先以这种方式来存储用户数据
// // 同步的方式写入数据
// const data = JSON.stringify([
//   {id: "12343_3213", name: "小妹123"}
// ])
// fs.writeFileSync(path.join(__dirname,'/user.json'), data)
// // console.log(path.join(__dirname,'/user.json'))
// // 同步的方式读取文件
// console.log(fs.readFileSync(path.join(__dirname,'/user.json'), "utf-8"))

// 用户的 model
function user() {
  var userInfo = []

  // 增加用户
  function addUser(obj) {
    // 校验是否为对象
    if (typeof obj !== "object" || !obj) return { errMessage: "ERROR: 'obj is not a object'" }
    // 校验 name 是否为空
    if (!obj.name) return { errMessage: "ERROR: 'name is required'" }
    // 校验 password 是否为空
    if (!obj.password) return { errMessage: "ERROR: 'password is required'" }
    // 查询是否有和插入的相同的用户名
    let isExisted = userInfo.filter(item => item.name === obj.name)
    if (isExisted.length > 0) return { errMessage: `ERROR: 'name is ${obj.name} existed'` }
    // 创建对象
    obj = { id: createId(userInfo), ...obj }
    // 添加到用户列表
    userInfo.push(obj)
    // 删除密码，并返回创建的结果
    obj = Object.assign({}, obj)
    delete obj.password
    return obj
  }
  // 获取用户信息
  function getUser(obj) {
    console.log("userInfo", userInfo)
    // 校验是否为对象
    if (typeof obj !== "object" || !obj) return { errMessage: "ERROR: 'obj is not a object'" }
    // 根据 id 过滤数据
    if (obj.id) {
      obj = userInfo.filter(item => item.id === obj.id)
      obj[0] && obj[0].password && delete obj[0].password
      return obj
    }
    // 根据其他字段过滤
    obj = Object.keys(obj).reduce((next, pre) => {
      // console.log(next, pre)
      return next.filter(item => item[pre] === obj[pre])
    }, userInfo)
    // 删除密码字段返回
    obj[0] && obj[0].password && delete obj[0].password
    return obj
  }
  // 修改用户信息
  function editUser(obj) {
    // 校验是否为对象
    if (typeof obj !== "object" || !obj) return { errMessage: "ERROR: 'obj is not a object'" }
    // 如果传了 id 字段 删除该字段
    let id = obj.id
    obj.id && delete obj.id
    // 密码长度是否大于5
    if (!(obj.password && obj.password.length > 5)) return { errMessage: "ERROR: 'password should be over five letter'" }
    // 把传过来的空的字段删除
    Object.keys(obj).map(key => {
      if (obj[key] === '' || obj[key]) delete obj[key]
    })
    //  查询id为传入的id的项，修改内容，并返回修改的项
    let editUser = userInfo.filter((item, index) => {
      // console.log(item,"item");
      // console.log(index,"index");
      if (item.id === id) {
        userInfo[index] = {...userInfo[index],...obj}
        return true
      }
    })
    // console.log(editUser, "editUser")
    // console.log(userInfo, "userInfo")
    // 修改的为空，也就是没有该id， 返回提示
    if(editUser.length === 0) return { message: "修改的用户不存在或者用户id传入错误" }
    obj.password && delete obj.password
    return obj
  }
  // 删除用户
  function deleteUser(id) {
    // 查询该 id 用户所在的用户列表的位置
    let index = userInfo.filter((item, index) => {
      if (item.id === id) {
        return index
      }
    })
    if (index.length) return { errMessage: "ERROR: 'this user is not existed'" }
    // 根据位置删除该用户，并保存删除的项
    let deleteItem = userInfo.splice(index[0], 1)
    // 删除的不存在时
    if(deleteItem.length === 0) return { message: "删除的用户不存在或者用户id传入错误" }
    return { id }
  }
  return {
    addUser,
    getUser,
    deleteUser,
    editUser
  }
}

module.exports = user
